#ifndef XGP_STUDY_DEMO40_LINKLIST_H
#define XGP_STUDY_DEMO40_LINKLIST_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//链表结点
typedef struct LinkNode {
    void* data;     //void*     无类型指针，可以指向任何类型的数据
    struct LinkNode* next;
}LinkNode;

//链表结构体
typedef struct LinkList {
    LinkNode* head;     //头节点
    int size;   //大小
    //不需要容量
}LinkList;

typedef void(*PRINTLINKNODE)(void*);

//初始化链表
LinkList* Init_LinkList();
//插入错作
void Insert_LinkList(LinkList* list, int pos,void* data);
//头插法建立整数型单链表
LinkList* List_HeadInsert(int size);
//尾插法
LinkList* List_TailInsert(int size);
//按序号查找
LinkNode* getElem(LinkList* list,int pos);
//按值查找
int Find_LinkList(LinkList* list,void* data);
//删除指定位置的值
void RemoveByPos_LinkList(LinkList* list,int pos);
//获得链表的长度
int Size_LinkList(LinkList* list);
//释放链表内存
void FreeSpace_LinkList(LinkList* list);
//打印
void Print_LinkList(LinkList* list,PRINTLINKNODE print);
#endif //XGP_STUDY_DEMO40_LINKLIST_H
